package com.example.entity;

import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * 磁盘文件/文件夹实体类
 * <p>
 * 对应数据库表：disk_files
 * </p>
 * <p>
 * 核心功能：
 * 1. 表示文件系统中的文件或文件夹实体
 * 2. 支持树形结构展示（通过children字段）
 * 3. 包含文件元数据和层级关系信息
 * </p>
 * <p>
 * 特殊设计：
 * 1. 包含树形结构展示专用字段（label/children）
 * 2. 混合存储文件和文件夹元数据（通过folder字段区分）
 * </p>
 */
@Data
public class DiskFiles{

    /**
     * 主键ID（自增）
     * 对应数据库列：id
     */
    private Integer id;

    /**
     * 树形结构显示标签（通常等于name字段）
     * 用于前端树形组件展示节点名称
     */
    private String label;

    /**
     * 子节点列表（树形结构专用）
     * 包含当前文件夹下的所有子文件/文件夹
     */
    private List<DiskFiles> children;


    /**
     * 文件/文件夹名称
     * 对应数据库列：name
     */
    private String name;

    /**
     * 是否为文件夹标识
     * 对应数据库列：folder
     */
    private String folder;

    /**
     * 文件存储路径（相对路径或绝对路径）
     * 对应数据库列：file
     */
    private String file;

    /**
     * 创建人用户ID
     * 对应数据库列：user_id
     */
    private Integer userId;

    /**
     * 文件类型标识
     * 对应数据库列：type
     * 示例值：
     * - "docx"：Word文档
     * - "folder"：文件夹
     * - "image/png"：PNG图片
     */
    private String type;

    /**
     * 文件大小（单位：MB）
     * 对应数据库列：size
     */
    private Double size;

    /**
     * 创建时间（格式：yyyy-MM-dd HH:mm:ss）
     * 对应数据库列：crate_time
     */
    private String crateTime;

    /**
     * 最后修改时间（格式：yyyy-MM-dd HH:mm:ss）
     * 对应数据库列：update_time
     */
    private String updateTime;

    /**
     * 所属文件夹ID
     * 对应数据库列：folder_id
     * 说明：
     * - 根目录为0或null
     * - 关联自身表的id字段
     */
    private Integer folderId;

    /**
     * 最外层文件夹ID
     * 对应数据库列：root_folder_id
     * 说明：
     * - 用于快速定位根目录
     */
    private Integer rootFolderId;

    /**
     * 删除标记
     * 对应数据库列：delete
     * 取值说明：
     * - true(1)：已删除（逻辑删除）
     * - false(0)：未删除
     */
    private Boolean delete;

    /**
     * 用户名（冗余存储）
     * 说明：用于快速显示创建人
     */
    private String userName;

    /**
     * 文件分类标签
     */
    private String category;

    /**
     * 文件保留天数
     */
    private Integer days;


//    public Integer getDays() {
//        return days;
//    }
//
//    public void setDays(Integer days) {
//        this.days = days;
//    }
//
//    public String getCategory() {
//        return category;
//    }
//
//    public void setCategory(String category) {
//        this.category = category;
//    }
//
//    public String getUserName() {
//        return userName;
//    }
//
//    public void setUserName(String userName) {
//        this.userName = userName;
//    }
//
//    public Integer getId() {
//        return id;
//    }
//
//    public void setId(Integer id) {
//        this.id = id;
//    }
//
//    public String getName() {
//        return name;
//    }
//
//    public void setName(String name) {
//        this.name = name;
//    }
//
//    public String getFolder() {
//        return folder;
//    }
//
//    public void setFolder(String folder) {
//        this.folder = folder;
//    }
//
//    public String getFile() {
//        return file;
//    }
//
//    public void setFile(String file) {
//        this.file = file;
//    }
//
//    public Integer getUserId() {
//        return userId;
//    }
//
//    public void setUserId(Integer userId) {
//        this.userId = userId;
//    }
//
//    public String getType() {
//        return type;
//    }
//
//    public void setType(String type) {
//        this.type = type;
//    }
//
//    public Double getSize() {
//        return size;
//    }
//
//    public void setSize(Double size) {
//        this.size = size;
//    }
//
//    public String getCrateTime() {
//        return crateTime;
//    }
//
//    public void setCrateTime(String crateTime) {
//        this.crateTime = crateTime;
//    }
//
//    public String getUpdateTime() {
//        return updateTime;
//    }
//
//    public void setUpdateTime(String updateTime) {
//        this.updateTime = updateTime;
//    }
//
//    public Integer getFolderId() {
//        return folderId;
//    }
//
//    public void setFolderId(Integer folderId) {
//        this.folderId = folderId;
//    }
//
//    public Integer getRootFolderId() {
//        return rootFolderId;
//    }
//
//    public void setRootFolderId(Integer rootFolderId) {
//        this.rootFolderId = rootFolderId;
//    }
//
//    public Boolean getDelete() {
//        return delete;
//    }
//
//    public void setDelete(Boolean delete) {
//        this.delete = delete;
//    }
}